﻿/**
 * 封装的shell
 */
#pragma once

#include <memory>
#include "shell_cpp.h"

class ZUartDriver;

/**
 * 封装的shell,每个不同的设备也许需要更改构造函数中的回调函数,
 * 需要以单例模式使用,初始化完成即可
 */
class ZShell {
public:
  /**
   * 构造函数
   * @param UART_DEVICE_ID 串口设备ID
   * @param INTC_DEVICE_ID 中断ID
   * @param UART_INT_IRQ_ID 串口中断ID
   */
  explicit ZShell(
      uint32_t UART_DEVICE_ID,
      uint32_t INTC_DEVICE_ID,
      uint32_t UART_INT_IRQ_ID
      );
  ~ZShell();

  /**
   * 执行一次逻辑,会将数据进行打印到界面
   */
  void runOnce() const;

private:
  // shell使用的串口
  std::shared_ptr<ZUartDriver> zUartDriver_{nullptr};
};